diff --git a/lib/email/receiver.rb b/lib/email/receiver.rb index 562c232443a..58a3acba122 100644 --- a/lib/email/receiver.rb +++ b/lib/email/receiver.rb @@ -194,7 +194,7 @@ module Email end markdown, elided_markdown = if html.present? - markdown = HtmlToMarkdown.new(html).to_markdown + markdown = HtmlToMarkdown.new(html, keep_img_tags: true).to_markdown markdown = trim_discourse_markers(markdown) EmailReplyTrimmer.trim(markdown, true) end diff --git a/lib/html_to_markdown.rb b/lib/html_to_markdown.rb index 2bc60f6015f..df8084ae4c1 100644 --- a/lib/html_to_markdown.rb +++ b/lib/html_to_markdown.rb @@ -6,7 +6,8 @@ class HtmlToMarkdown def initialize(name, head="", body="", opened=false, markdown=""); super; end end - def initialize(html) + def initialize(html, opts={}) + @opts = opts || {} @doc = Nokogiri::HTML(html) remove_whitespaces! end @@ -133,8 +134,12 @@ class HtmlToMarkdown end def visit_img(node) - title = node["alt"].presence || node["title"].presence - @stack[-1].markdown << "![#{title}](#{node["src"]})" + if @opts[:keep_img_tags] + @stack[-1].markdown << node.to_html + else + title = node["alt"].presence || node["title"].presence + @stack[-1].markdown << "![#{title}](#{node["src"]})" + end end def visit_a(node) diff --git a/spec/components/html_to_markdown_spec.rb b/spec/components/html_to_markdown_spec.rb index 15af2dcef34..f2344e58392 100644 --- a/spec/components/html_to_markdown_spec.rb +++ b/spec/components/html_to_markdown_spec.rb @@ -31,8 +31,14 @@ describe HtmlToMarkdown do expect(html_to_markdown(%Q{Discourse})).to eq("[Discourse](https://www.discourse.org)") end + HTML_WITH_IMG ||= %Q{Discourse Logo} + it "converts " do - expect(html_to_markdown(%Q{Discourse Logo})).to eq("![Discourse Logo](https://www.discourse.org/logo.svg)") + expect(html_to_markdown(HTML_WITH_IMG)).to eq("![Discourse Logo](https://www.discourse.org/logo.svg)") + end + + it "keeps with 'keep_img_tags'" do + expect(HtmlToMarkdown.new(HTML_WITH_IMG, keep_img_tags: true).to_markdown).to eq(HTML_WITH_IMG) end (1..6).each do |n|